package com.bjsxt.common.util;

import java.security.MessageDigest;

import org.springframework.stereotype.Component;
@Component("encryPasswordUtil")
public class EncryPasswordUtil {
    
   public String toMD5(String plainText) {
     try {
        //生成实现指定摘要算法的 MessageDigest 对象。
        MessageDigest md = MessageDigest.getInstance("MD5");  
        //使用指定的字节数组更新摘要。
        md.update(plainText.getBytes());
        //通过执行诸如填充之类的最终操作完成哈希计算。
        byte b[] = md.digest();
        //生成具体的md5密码到buf数组
        int i;
        StringBuffer buf = new StringBuffer("");
        for (int offset = 0; offset < b.length; offset++) {
          i = b[offset];
          if (i < 0)
            i += 256;
          if (i < 16)
            buf.append("0");
          buf.append(Integer.toHexString(i));
        }
        return buf.toString();
        //System.out.println("32位: " + buf.toString());// 32位的加密
        //System.out.println("16位: " + buf.toString().substring(8, 24));// 16位的加密，其实就是32位加密后的截取
     } 
     catch (Exception e) {
       e.printStackTrace();
     }
     return null;
   }
   
   /*新型加密算法
    * 32位随机数+$md5$  +  md5加密(32位随机数+$md5$+password)
    * 
   */
   public String getNewEncryPass(String password)
   {
	   RandomUtil random=new RandomUtil();
	   //32位由字母数字组成的随机数
	   String ranStr = random.getRandom(32);
	   //32位随机数和$md5$
	   String useStr=ranStr+"$md5$";
	   //经过新型加密算法后的密文
	   String newEncryStr=useStr+this.toMD5(useStr+password);
	   return newEncryStr;
	   
   }
   /*
    * 验证方法：可以通过截取来得到   32位随机数+$md5$，再按照加密算法来得到密文，使它 和数据库中的密码相比较
    * */
   public boolean checkPassword(String password,String encryStr)
   {
	   if(encryStr.indexOf("$")==-1)
	   {
		   return false;
	   }
	   
	   String[] split = encryStr.split("\\$");
	   String useStr=split[0]+"$"+split[1]+"$";
	   //对password进行加密
	   String passwordEncry=useStr+new EncryPasswordUtil().toMD5(useStr+password);
	   if(encryStr.equalsIgnoreCase(passwordEncry))
	   {
		   return true;
	   }
	   return false;
   }
   public static void main(String agrs[]) {
      // String newEncryPass = new EncryPasswordUtil().getNewEncryPass("111111");
       //System.out.println(newEncryPass);
	   String encryStr="YFGYrmEGwbLrC3FeIkz1ZgrL2hgLsWM1$md5$3f65168833c020d54aa72ffaf51d95af";
	   System.out.println(new EncryPasswordUtil().checkPassword("111111", encryStr));
   }
}
